package main.java.indi.zyj.designmodel.singleton;


/**
 * @Description 懒汉模式代码效率低，那在同步前判断一下有没有实例化不就好了，
 *              若没有实例化则用同步方法new一个，否则直接return即可。即所谓的双重检查。
 *              需要用到关键字volatile，防止指令重排。如果不用volatile关键字，就会和线程不安全情形一样，
 *              在if判断那会有并发。
 * @author zyj
 * @date 2024/05/09 15:15
 */
public class Singleton3 {


    // 私有的静态实例变量
    private static volatile Singleton3 uniqueInstance;

    // 构造函数，以防止外部通过 `new` 关键字创建新实例
    private Singleton3(){}

    // 公共的静态方法，用于获取该类的唯一实例
    public static Singleton3 getUniqueInstance(){
        if (uniqueInstance == null){
            synchronized (uniqueInstance){
                if (uniqueInstance == null){
                    uniqueInstance = new Singleton3();
                }
            }
        }
        return uniqueInstance;
    }


}
